package lizhe;

/**
 * 有效的数独
 * 请你判断一个9 x 9 的数独是否有效。只需要 根据以下规则 ，验证已经填入的数字是否有效即可。
 * <p>
 * 数字1-9在每一行只能出现一次。
 * 数字1-9在每一列只能出现一次。
 * 数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。（请参考示例图）
 * <p>
 * 注意：
 * <p>
 * 一个有效的数独（部分已被填充）不一定是可解的。
 * 只需要根据以上规则，验证已经填入的数字是否有效即可。
 * 空白格用'.'表示。
 */
public class ValidSudoku {
    public static boolean isValidSudoku(char[][] board) {
        int[] line = new int[9];
        int[] row = new int[9];
        int[] cell = new int[9];

        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (board[i][j] == '.') {
                    continue;
                }
                int shift = 1 << (board[i][j] - '0');
                int k = (i / 3) * 3 + j / 3;
                if ((line[i] & shift) > 0 || (row[j] & shift) > 0 || (cell[k] & shift) > 0) {
                    return false;
                }

                line[i] |= shift;
                row[j] |= shift;
                cell[k] |= shift;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        char a = '0';
        int i = a;
        int b = a - '0';
        System.out.println(i + "");
        System.out.println(b + "");
    }
}
